package cn.com.surker.erp.service.production;

import cn.com.surker.erp.entity.production.ErpInvoice;
import cn.com.surker.erp.entity.production.ErpLendInvoice;
import cn.com.surker.system.entity.DataSourceInfo;
import cn.com.surker.system.entity.SysUser;

import java.util.List;
import java.util.Map;

/**
 * erp的发货单类
 *
 * @author luotao
 * @date 2024/4/8
 */
public interface IERPInvoiceService {

	/**
	 * 根据发货单编码查询发货单
	 *
	 * @param ds
	 * @param code
	 * @return
	 */
	ErpInvoice queryDataByCode(DataSourceInfo ds, String code);

	/**
	 * 根据发货单id查询发货单数据
	 *
	 * @param ds
	 * @param id
	 * @return
	 */
	ErpInvoice queryDataById(DataSourceInfo ds, Long id);

	/**
	 * 查询发货单信息
	 *
	 * @param ds       数据源
	 * @param code     编码
	 * @param loadType 编码来源方式:0,扫描小票数据;1:用户手输的
	 * @return
	 */
	Map<String, Object> loadDetail(DataSourceInfo ds, String code, Integer loadType);

	/**
	 * 查询是否处理完成
	 *
	 * @param ds        数据源
	 * @param invoiceID 发货单号
	 * @return 返回null或者0表示都处理完成
	 */
	Double checkHandleStere(DataSourceInfo ds, Long invoiceID);

	/**
	 * 回收小票
	 *
	 * @param ds 数据源
	 * @param id 发货单id
	 * @return
	 */
	Integer retrieve(DataSourceInfo ds, Long id);

	/**
	 * 查询未回收小票的发货单
	 *
	 * @param searchVal 筛选条件
	 * @param startTime 开始时间
	 * @param endTime   截止时间
	 * @param pageIndex 分页信息
	 * @param limit
	 * @return
	 */
	Map<String, Object> unPage(DataSourceInfo ds, String searchVal, String startTime, String endTime, Integer pageIndex, Integer limit);

	/**
	 * 根据发货单编码查询借料发货单数据
	 *
	 * @param ds
	 * @param code
	 * @return
	 */
	Map<String, Object> queryLendDataByCode(DataSourceInfo ds, String code);

	/**
	 * 生产站点的借料发货单信息(分页查询)
	 *
	 * @param proStationDs 	生产站点数据源
	 * @param invoiceCode	发货单编号
	 * @param sync         是否同步
	 * @param searchVal    搜索信息
	 * @param startTime    查询起始时间
	 * @param endTime      查询截止时间
	 * @param pageIndex    分页信息
	 * @param limit
	 * @return key:total,总数量;records:记录数据
	 */
	Map<String, Object> sourceStationLendPage(DataSourceInfo proStationDs, String invoiceCode, Integer sync, String searchVal, String startTime, String endTime, Integer pageIndex, Integer limit);

	/**
	 * 生产站点的借料发货单信息
	 *
	 * @param proStationDs
	 * @param sync
	 * @param searchVal
	 * @param startTime
	 * @param endTime
	 * @param invoiceIds
	 * @return
	 */
	List<ErpLendInvoice> sourceStationLendRecords(DataSourceInfo proStationDs, Integer sync, String searchVal, String startTime, String endTime, List<Long> invoiceIds);

	/**
	 * 生产借料的源站点的发货单信息
	 * @param proStationDs
	 * @param invoiceId
	 * @return
	 */
	ErpLendInvoice sourceStationLendRecord(DataSourceInfo proStationDs,Long invoiceId);

	/**
	 * 查询比该发货单id大的全部发货单信息
	 * @param ds
	 * @param invoiceId
	 * @return
	 */
	List<ErpInvoice> queryBuyLastId(DataSourceInfo ds, Long invoiceId);

	/**
	 * 查询今天的发货单数据
	 *
	 * @param ds
	 * @return
	 */
	List<ErpInvoice> queryTodayList(DataSourceInfo ds);
}
